Compilers are programs that translate source code into object code. A compiler looks at the source code and collects and reorganizes the instructions in order to translate the source code into object code.
A compiler is included with a high level programming language. Examples of high level programming languages include C, C++, Fortran, Pascal, etc. The compiler may be written in the same language as the high level programming language or a different language.
Developers of compilers often revise the compilers to enhance their functionality and/or to correct errors that may arise. However, when changes are made to the compiler, it is often difficult to verify that such improvements have not regressed functionality of previously working programs, especially in those instance where the developers do not have access to the runtime environment of the programming language.
In an attempt to check the revised compiler, a set of tests (e.g., un-executable code snippets) are used to determine whether the revised compiler is functioning properly. The compiled code is inspected and the test cases are looked at with reference to the compiled code, but the test cases are not executed. Instead, verification involves manual inspection of the generated code to guarantee that functionality pre- and post-compiler improvement is identical. When the set of tests becomes large, such inspection can be very laborious, tedious and counterproductive.